package com.ruoyi.service.message.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.enums.YesNoEnum;
import com.ruoyi.service.message.entity.UserMessageEntity;
import com.ruoyi.service.message.mapper.UserMessageMapper;
import com.ruoyi.service.message.query.MessageBaseQuery;
import com.ruoyi.service.message.service.UserMessageService;
import java.util.List;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 用户信息 服务实现类
 * </p>
 *
 * @author Zane
 * @since 2025-10-25
 */
@Service
public class UserMessageServiceImpl extends ServiceImpl<UserMessageMapper, UserMessageEntity>
    implements UserMessageService {

  @Override
  public List<UserMessageEntity> queryList(MessageBaseQuery query, Long userId) {
    final LambdaQueryWrapper<UserMessageEntity> queryWrapper = effectQuery()
        .eq(UserMessageEntity::getUserId, userId).orderByDesc(UserMessageEntity::getId);
    return list(queryWrapper);
  }

  @Override
  public UserMessageEntity getByIdAndUserId(Long messageId, Long userId) {
    final LambdaQueryWrapper<UserMessageEntity> queryWrapper = effectQuery()
        .eq(UserMessageEntity::getId, messageId)
        .eq(UserMessageEntity::getUserId, userId);
    return getOne(queryWrapper);
  }

  @Override
  public Long unreadCount(Long userId) {
    return count(effectQuery()
        .eq(UserMessageEntity::getUserId, userId)
        .eq(UserMessageEntity::getCheckFlag, YesNoEnum.NO.getCode()));
  }

  private LambdaQueryWrapper<UserMessageEntity> effectQuery() {
    return new LambdaQueryWrapper<UserMessageEntity>()
        .eq(UserMessageEntity::getDelFlag, YesNoEnum.NO.getCode());
  }
}
